/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.manager;

import br.com.deployment.dao.TransferenciaDao;
import br.com.deployment.entidade.registroimovel.Transferencia;
import br.com.deployment.entidade.registroimovel.Objeto;
import br.com.deployment.entidade.registroimovel.Imovel;
import br.com.deployment.entidade.empresa.Cartorio;
import br.com.deployment.entidade.humana.Pessoa;
import br.com.deployment.servico.CartorioServico;
import br.com.deployment.servico.ImovelServico;
import br.com.deployment.utilitario.Sexo;
import br.com.deployment.utilitario.TipoPessoa;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperRunManager;

/**so
 *
 * @author elyjr
 */
@ManagedBean
@SessionScoped
public class ManagerCertidao implements Serializable{

    @EJB
    ImovelServico imovelDao;
    @EJB
    TransferenciaDao transferenciaDao;
    @EJB
    CartorioServico cartorioDao;
    
    private String nome;
    private String documento;
    private Imovel imovel;
    private Objeto objeto;
    private List<Transferencia> lstPositivaImovel;
    private Transferencia transferencia;
    private Transferencia traSelect;
    private Pessoa pessoa;
    private boolean controlePessoa;

    public ManagerCertidao() {
    }

    @PostConstruct
    public void init() {
        this.pessoa = new Pessoa();
        this.lstPositivaImovel = new ArrayList<Transferencia>();
        this.imovel = new Imovel();
        this.objeto = new Objeto();
        this.traSelect = new Transferencia();
        
        System.err.println("REINICIOU");
    }
    
   
    public void atribui(Transferencia t) {  
       traSelect = t;
       System.err.println("-->"+t);
    }  
    

    public Objeto getObjeto() {
        return objeto;
    }

    public Transferencia getTraSelect() {
        return traSelect;
    }

    public void setTraSelect(Transferencia traSelect) {
        this.traSelect = traSelect;
    }

    public void setObjeto(Objeto objeto) {
        this.objeto = objeto;
    }

    public Imovel getImovel() {
        return imovel;
    }

    public void setImovel(Imovel imovel) {
        this.imovel = imovel;
    }

    public List<Transferencia> getLstPositivaImovel() {
        return lstPositivaImovel;
    }

    public void setLstPositivaImovel(List<Transferencia> lstPositivaImovel) {
        this.lstPositivaImovel = lstPositivaImovel;
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public boolean isControlePessoa() {
        return controlePessoa;
    }

    public void setControlePessoa(boolean controlePessoa) {
        this.controlePessoa = controlePessoa;
    }

    public String getDocumento() {
        return documento;
    }

    public void setDocumento(String documento) {
        this.documento = documento;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public void certidaoPositiva() {
        if (pessoa != null) {

            if (controlePessoa) {
                pessoa.setTipo(TipoPessoa.Fisica);
            } else {
                pessoa.setTipo(TipoPessoa.Juridica);
            }

            lstPositivaImovel = transferenciaDao.findTransImovel(null, pessoa, null, null);
        }
//        if(imovel != null){
//            System.err.println(imovel.getRegistro());
//            imovel.setObjeto(objeto);
//            lstPositivaImovel = transferenciaDao.findTransImovel(imovel, null, null);
//            System.err.println(lstPositivaImovel);
//          Msg.messagem("Filtro requerido");  
//        }
    }
    
    public String textoAdTra(List<Pessoa> p){
        String texto = "";
         for (Pessoa pessoa1 : p) {
            
                texto += pessoa1.getNome() + ", "
                        + (pessoa1.getEndereco().getPais() == null ? "" : pessoa1.getEndereco().getPais().equalsIgnoreCase("Brasil") ? (pessoa1.getSexo() == Sexo.Masculino ? "Brasileiro" : "Brasileira") : "")
                        + "" + (pessoa1.getEstadocivil() == null ? "" : ", " + pessoa1.getEstadocivil().toString())
                        + "" + (pessoa1.getProfissao() == null ? "" : ", " + pessoa1.getEstadocivil().toString()) + ","
                        + " residente e domiciliado ";

                texto += pessoa1.getEndereco().getTipo_logradouro().toString().toLowerCase()
                        + "" + (pessoa1.getEndereco().getLogradouro() == null ? " " : " " + pessoa1.getEndereco().getLogradouro())
                        + "" + (pessoa1.getEndereco().getBairro() == null ? "" : ", Bairro " + pessoa1.getEndereco().getBairro())
                        + "" + (pessoa1.getEndereco().getCidade() == null ? "" : ", " + pessoa1.getEndereco().getCidade().getNom_cidade())
                        + "" + (pessoa1.getEndereco().getEstado() == null ? "" : ", " + pessoa1.getEndereco().getEstado().getNom_estado()) + "";


                texto += ""
                        + pessoa1.getCpf() == null ? "" : ", portador do CPF nº"
                        + pessoa1.getRg() == null ? "" : "e do RG nº " + pessoa1.getRg();

                texto += ""
                        + pessoa1.getCnpj() == null ? "" : ", portador do CNPJ nº" + pessoa1.getCnpj();
        }
        return texto;
    }
    
    public String geraTextoObjeto(Imovel imovel){
        String texto = "";
          texto += " Um(a) " + imovel.getObjeto().getTipo().toString() + 
                  " situado(a) no(a) " + imovel.getObjeto().getTipo_logradouro().toString()
                 + " " + imovel.getObjeto().getLogradouro().toString()  + ","
                + " número " + imovel.getObjeto().getNumero().toString()  
                  + ", bairro " + imovel.getObjeto().getBairro().toString()  + " com as"
                + " seguintes características e  confrontações: " 
                  + imovel.getObjeto().getDescricao().toString()  + ". Frente " 
                  + imovel.getObjeto().getFrente().toString()  + "; lado direito, "
                + "" + imovel.getObjeto().getLadoDireito().toString() 
                  + "; lado esquerdo," + imovel.getObjeto().getLadoEsquerdo().toString() 
                  + "; fundo "+imovel.getObjeto().getFundo().toString() ;
          
          return texto;
    }

    public void emitirPositiva() {
        
        try {

            FacesContext facesContext;
            HttpServletResponse response;
            InputStream inputStream;

            Cartorio cartorio = new Cartorio();
            cartorio = cartorioDao.getCartorioContext();
            String texto;

            String fileOrigem;
            String fileDestino;
            String nomeTitulo = "" + cartorio.getTitular().getNome();
            String endereco = "" + cartorio.getEndereco().getTipo_logradouro().toString().toLowerCase() + " " + cartorio.getEndereco().getLogradouro() + " - " + cartorio.getEndereco().getTelefone();
            String cidade = "" + cartorio.getEndereco().getCidade().getNom_cidade().toUpperCase() + " - " + cartorio.getEndereco().getEstado().getNom_estado().toUpperCase();

//            traSelect = transferenciaDao.find(traSelect.getId());
            
               texto = "Certifico, como me faculta a lei e a requerimento de parte ";
                texto += "interessado que revendo em meu poder e Cartório, "
                +  cartorio.getNome() + ","
                + "os Livros de Registro Geral de Imóveis, nos mesmos constatei, a existência do imóvel registrado sob Nº"
                + " ";
                 texto += traSelect.getImovel().getRegistro() + " em nome de "
                + textoAdTra(traSelect.getAdquirente()) + " , tendo por objeto da referida(o) Matrícula / Registro o seguinte: "
                + geraTextoObjeto(traSelect.getImovel()) +" ;";

            HashMap<String, Object> parametros;


            parametros = new HashMap<String, Object>();
            parametros.put("cartorioNome", cartorio.getNome());
            parametros.put("cartorioTitular", nomeTitulo + " - Titular");
            parametros.put("cartorioEndereco", endereco);
            parametros.put("cartorioCidade", cidade);

            parametros.put("texto", texto);
            facesContext = FacesContext.getCurrentInstance();

            fileOrigem = facesContext.getExternalContext().getRealPath("/relatorio/certidaoPositiva.jasper");
            response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
            inputStream = facesContext.getExternalContext().getResourceAsStream("/relatorio/certidaoPositiva.jasper");

            ServletOutputStream ouputStream = response.getOutputStream();

            JasperRunManager.runReportToPdfStream(inputStream, ouputStream, parametros, new JREmptyDataSource());
            response.setContentType("application/pdf");
            facesContext.responseComplete();
            ouputStream.flush();
            ouputStream.close();
        } catch (IOException ex) {
            Logger.getLogger(ManagerBuscarImovel.class.getName()).log(Level.SEVERE, null, ex);
        } catch (JRException ex) {
            Logger.getLogger(ManagerBuscarImovel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String certidaoNegativa() {

        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Nome" + nome, ""));


        FacesContext facesContext;
        HttpServletResponse response;
        InputStream inputStream;
        HashMap<String, Object> parametros;
        String texto;

        if (this.nome == null || this.documento == null || this.nome.length() <= 0 || this.documento.length() <= 0) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage("Informe o 'Nome' e a 'Identidacacão'."));

        } else {
            try {
                texto = "Certifico, como me faculta a lei e a requerimento de parte ";
                texto += "interessada que revendo em meu poder a Cartório, 1º Ofício ";
                texto += "desta Cidade e Comarca de Parnaíba, Estoque do Piauí, os livros ";
                texto += "Registro Geral de Imóveis, dos mesmos constatei, não existir nenhum ";
                texto += "imóvel matriculado / registrado em nome de ";
                texto += this.nome;
                texto += " portador do CPF/CNPJ nº ";
                texto += this.documento;
                texto += ". Dou fé. Eu __________________________________ Oficial do Registro.";
                parametros = new HashMap<String, Object>();
                parametros.put("texto", texto);
                facesContext = FacesContext.getCurrentInstance();
                response = (HttpServletResponse) facesContext.getExternalContext().getResponse();
                inputStream = facesContext.getExternalContext().getResourceAsStream("/reports/certidao_negativa.jasper");
                ServletOutputStream ouputStream = response.getOutputStream();
                JasperRunManager.runReportToPdfStream(inputStream, ouputStream, parametros, new JREmptyDataSource());
                response.setContentType("application/pdf");
                facesContext.responseComplete();
                ouputStream.flush();
                ouputStream.close();
            } catch (JRException ex) {

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(ex.getMessage()));
            } catch (Exception ex) {

                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(ex.getMessage()));
            }
        }
        return "certidaoNegativa";
    }
}
